package com.agencia.jsf;
import java.util.ArrayList;

import java.util.List;

import javax.faces.component.html.HtmlDataTable;
import javax.faces.component.html.HtmlInputHidden;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

import agencia.ExcursionMedioDia;
import agencia.exceptions.PrecioInferiorException;
import agencia.persistencia.ExcursionDAO;
	
public class AdministrarExcursionesMedioDiaBean {

	    private HtmlDataTable 					dataTable;
	    private ExcursionMedioDia				dataItem		= new ExcursionMedioDia();
	    private HtmlInputHidden 				dataItemId		= new HtmlInputHidden();;
		private List<ExcursionMedioDia>	excursiones;
		private int 							cantidad 		= 0;
		private int 							proximoId		= 1;

		

		public AdministrarExcursionesMedioDiaBean() throws PrecioInferiorException {
			cargar();
		}
		
		@SuppressWarnings("deprecation")
		private void cargar() throws PrecioInferiorException {
			ExcursionDAO excursionDAO = new ExcursionDAO();
			excursiones = excursionDAO.findAll();
			//excursiones = new ArrayList<ExcursionMedioDia>();
			
/*			ExcursionMedioDia exc = new ExcursionMedioDia();
			exc.setId(Long.valueOf(getProximoId()));
			exc.setNombre("Zafariii");
			exc.setCategoria(5);
			Date date = new Date("20/11/08");
			exc.setFecha(date);
			excursiones.add(exc);*/

			cantidad = excursiones.size();
			actualizarProximoId();
			
			/* Levantaria de la BD todos los servicios cuyo idPadre = exc.idPadre
			 * y tipoPadre = "Excursion" y debria agregarlos a la Habitacion
			 */
			
		}
		
		public void actualizarProximoId(){
			proximoId++;		
		}
		
		public int getProximoId(){
			return proximoId;
		}
		
		public String crear() {
			dataItem = new ExcursionMedioDia();		

			cantidad++;
			dataItemId.setValue(new Long(cantidad));
			
			return "editar";
		}

		public String editar() {
			// Obtengo la fila completa
			dataItem = (ExcursionMedioDia) dataTable.getRowData();
		    dataItemId.setValue(dataItem.getId());
		
			return "editar";
		}
		
		public String listarServicios() {
			dataItem = (ExcursionMedioDia) dataTable.getRowData();
			
			FacesContext context = FacesContext.getCurrentInstance();		
			HttpServletRequest request= (HttpServletRequest)context.getExternalContext().getRequest();
			request.getSession().setAttribute("idPadre", dataItem.getId());
			request.getSession().setAttribute("tipoPadre", dataItem.getTipoPadre());	
			request.getSession().setAttribute("accionTerminar", "terminarExcursion");
			
			return "listarServicios";
		}
		private void persistirExcursion(){
			ExcursionDAO excursionDAO = new ExcursionDAO();
			excursionDAO.getSession().beginTransaction().begin();
			excursionDAO.save(dataItem);
			excursionDAO.getSession().beginTransaction().commit();
			
		}
		public String guardar() {
			dataItem.setId(Long.valueOf(dataItemId.getValue().toString()));
						
			if (cantidad > excursiones.size()){
				dataItem.setId(Long.valueOf(getProximoId()));
				persistirExcursion();
				excursiones.add(dataItem);
				actualizarProximoId();
			}
			return "listar";
		}
		
		public String eliminar(){
			dataItem = (ExcursionMedioDia) dataTable.getRowData();
			excursiones.remove(dataItem);
			cantidad--;
			return "listar";
		}

		public String listar() {
			return null;
		}

		public String volver() {
			/*FacesContext.getCurrentInstance().getApplication().getNavigationHandler()
				.handleNavigation(FacesContext.getCurrentInstance(),null,"volver");*/
				
			/*ExternalContext extCon = FacesContext.getCurrentInstance().getExternalContext();
			HttpSession session = (HttpSession) extCon.getSession(true);
			session.invalidate();*/
			
			// Si se creo uno nuevo, vuelvo el conteo hacia atras
			cantidad = excursiones.size();

			return "volver";
		}
		

		//-------------------------------------
		
		public HtmlDataTable getDataTable() {
			return dataTable;
		}

		public void setDataTable(HtmlDataTable dataTable) {
			this.dataTable = dataTable;
		}

		public ExcursionMedioDia getDataItem() {
			return dataItem;
		}

		public void setDataItem(ExcursionMedioDia dataItem) {
			this.dataItem = dataItem;
		}

		public HtmlInputHidden getDataItemId() {
			return dataItemId;
		}

		public void setDataItemId(HtmlInputHidden dataItemId) {
			this.dataItemId = dataItemId;
		}

		public int getCantidad() {
			return cantidad;
		}

		public void setCantidad(int cantidad) {
			this.cantidad = cantidad;
		}

		public List<ExcursionMedioDia> getExcursiones() {
			return excursiones;
		}

		public void setExcursiones(List<ExcursionMedioDia> excursiones) {
			this.excursiones = (ArrayList<ExcursionMedioDia>) excursiones;
		}
		
	}

